"""
宿舍内务计算
宿舍内务根据难度分为几个等级，每完成一项任务就可以累计对应等级的分数。等级和分数对应关系如下：
1级：擦桌子、椅子、窗户 - 对应1分
2级：扫地、拖地 - 对应2分
3级：扫厕所 - 对应3分
4级：帮全宿舍打饭 - 对应4分
5级：帮全宿舍签到 - 对应5分

编写一个Python程序，先读取“宿舍老大的内务记录.txt”文件，获取所有已填写的信息（字典格式），文件不存在则创建空字典用于记录
然后让用户输入自己完成的宿舍内务任务和完成次数。
将信息存储到字典中，以：{任务: 次数} 的格式存储，如果任务已经存在则累加次数，如果任务不存在则添加新的任务。
将任务记录更新到 “宿舍老大的内务记录.txt” 文件中，统计并显示用户总共完成每项任务的次数和总分。
程序结束

编程思路提示：
实现步骤：try方式读取文件 - eval转换为字典 - 接收用户输入 - 更新字典次数 - 计算分数 - str方式转换字典为字符串 - 保存到文件
使用with open来操作文件。
读取文件时，将字符串转换回字典，用 eval 函数。
写入文件前，将字典转换为字符串，用 str 函数。
任务和分数的对应字典用：
    task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}
"""


task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}


def main():     # 面向过程编程
    """
    宿舍内务计算
    """
    path = "C:\\Users\\Administrator\\Desktop\\test\\宿舍老大的内务记录.txt"

    try:
        with open(path, 'r', encoding='UTF-8') as rf:
            dic = eval(rf.read())     # 字符串， "{'name': 'zhangsan', 'age': 21}"
    except Exception as E:
        dic = {}        # 文件不存在则创建空字典用于记录

    # job_name = input("老大你今天干啥了？ ")
    # if job_name not in task_scores:
    #     print("输入的任务名称有误！")
    #     return

    print("选择已完成的任务编号：")
    task_lis = list(task_scores.keys())     # 取出所有的任务名称并转换成列表
    for n, tk in enumerate(task_lis):
        print(n, tk)
    job_num = int(input("输入编号："))
    job_name = task_lis[job_num]

    job_times = int(input("几次？"))

    if job_name in dic:
        dic[job_name] = dic.get(job_name) + job_times
    else:
        dic[job_name] = job_times

    dic_str = str(dic)
    with open(path, 'w', encoding="utf-8") as wf:
        wf.write(dic_str)

    total = 0       # 假设总分为0
    print("老大已完成如下工作：")
    for j, t in dic.items():
        print(f"{j}: {t}")

        score = task_scores.get(j)      # 获取任务分数
        ts = score * t                  # j 任务的总分
        total += ts

    print(f"总分是：{total}")


if __name__ == '__main__':
    main()
